home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / flilib.zip / FLISRC.ZIP / JREADWRI.C < prev    next >
C/C++ Source or Header  |  1989-11-16  |  725b  |  38 lines

  1.  
  2. #include "jlib.h"
  3.  
  4. /* Read or write a buffer from file.  Usually you use dos_read() or dos_write()
  5.    macros rather than calling this one directly */
  6. long dos_rw(Jfile f,void *buf,long size,int ah)
  7. {
  8. union i86_regs reg;
  9. long written;
  10. unsigned s1;
  11.  
  12. written = 0;
  13. while (size > 0)
  14.     {
  15.     reg.b.ah = ah;
  16.     reg.w.bx = f;
  17.     s1 = (size > 0x0c000L ?  0xc000 : size);
  18.     reg.w.cx = s1;
  19.     reg.w.dx = i86_ptr_offset(buf);
  20.     reg.w.ds = i86_ptr_seg(buf);
  21.     if ((i86_sysint(0x21,®,®))&1)    /* check carry */
  22.         {
  23.         goto OUT;
  24.         }
  25.     else
  26.         {
  27.         written += (unsigned)reg.w.ax;
  28.         size -= (unsigned)reg.w.ax;
  29.         if (s1 != reg.w.ax)
  30.             goto OUT;
  31.         }
  32.     buf = i86_norm_ptr((char *)buf + s1);
  33.     }
  34. OUT:
  35. return(written);
  36. }
  37.  
  38.